package com.study4j.common.component;

/**
 * @description redis存储工具类接口
 * @author Jiangbin
 * @date 2019年10月7日 下午9:44:34
 */
public interface ICache {

	/**
	 * @description 存储数据（没有过期时间）
	 * @param key   存储的键
	 * @param value 存储的值
	 * @author Jiangbin
	 * @date 2019年10月7日 下午10:04:50
	 */
	void put(String key, String value);

	/**
	 * @description 存储数据
	 * @param key    存储的键
	 * @param value  存储的值
	 * @param expire 过期时间
	 * @author Jiangbin
	 * @date 2019年10月7日 下午10:06:54
	 */
	void put(String key, String value, long expire);

	/**
	 * @description 根据键值获取存储的值
	 * @param key 键
	 * @return 存储的值
	 * @author Jiangbin
	 * @date 2019年10月7日 下午10:02:05
	 */
	String get(String key);

	/**
	 * @description 以增量的方式将long值存储在变量中。
	 * @param key   存储的键
	 * @param delta
	 * @return
	 * @author Jiangbin
	 * @date 2019年10月7日 下午10:02:09
	 */
	Long increment(String key, long delta);

	/**
	 * @description 判断redis中是否该有键值存储
	 * @param key 存储的键
	 * @return 判断结果
	 * @author Jiangbin
	 * @date 2019年10月7日 下午10:02:12
	 */
	boolean exists(String key);

	/**
	 * @description 根据存储的键来设置过期时间
	 * @param key     存储的键
	 * @param seconds 过期时间
	 * @return 设置是否成功
	 * @author Jiangbin
	 * @date 2019年10月7日 下午10:02:12
	 */
	boolean expire(String key, Long seconds);

	/**
	 * @description 根据键值的前缀来删除对应存储的值
	 * @param prefix 键值的前缀
	 * @author Jiangbin
	 * @date 2019年10月7日 下午10:02:17
	 */
	void delKeyByPrefix(String prefix);

	/**
	 * @description 根据键值的后缀来删除对应存储的值
	 * @param suffix 键值的后缀
	 * @author Jiangbin
	 * @date 2019年10月7日 下午10:02:20
	 */
	void delKeyBySuffix(String suffix);

	/**
	 * @description
	 * @param key
	 * @param hashKey
	 * @param value
	 * @author Jiangbin
	 * @date 2019年10月7日 下午10:17:09
	 */
	void hput(String key, String hashKey, Object value);

	/**
	 * @description 获取map存储结构的值
	 * @param key     键值
	 * @param hashKey map的键值
	 * @return 存储的值
	 * @author Jiangbin
	 * @date 2019年10月7日 下午10:18:13
	 */
	String hget(String key, String hashKey);

	/**
	 * @description 删除map机构存储中对应的值
	 * @param key     键值
	 * @param hashKey map的键值
	 * @return
	 * @author Jiangbin
	 * @date 2019年10月7日 下午10:18:03
	 */
	Long hdel(String key, String hashKey);

	/**
	 * @description 根据键值删除存储的值
	 * @param key 键值
	 * @author Jiangbin
	 * @date 2019年10月7日 下午10:02:31
	 */
	void delKey(String key);

}
